#ifndef _SERVER_H
#define _SERVER_H

#include"database_manager.h"
#include"message.h"
#include"thread_pool.h"
#include<iostream>
#include<memory>
#include <unistd.h>

class Server
{
private:
    /// @brief 指向数据库的指针
    shared_ptr<DatabaseManager> db_ptr_;
    /// @brief 指向线程池的指针
    shared_ptr<ThreadPool> t_pool_;
    /// @brief 监听的套接字
    int sfd_;
    /// @brief 端口号
    unsigned short port_;
    /// @brief ip地址
    string ip_;
    /// @brief 运行标识
    bool running_;

    

    /// @brief 处理客户端请求
    void handleClient(int sfd, sockaddr_in caddr);

    /// @brief 获取当前时间
    static string getCurrentTime();



public:
    /// @brief 构造函数
    /// @param db_manager 传入的初始化好的数据库对象
    /// @param ip ip地址
    /// @param port 端口号
    Server(shared_ptr<DatabaseManager> db_manager, shared_ptr<ThreadPool> thread_pool, const string& ip, unsigned short port);
    ~Server();

    /// @brief 启动服务器
    /// @return 成功返回true，失败返回false
    bool start();

    /// @brief 停止服务器
    /// @return 成功返回true，失败返回false
    bool stop();
};

#endif